package com.qding.park.manager.service.statis.mapper;

import java.util.Date;
import java.util.List;

import org.apache.ibatis.annotations.Param;

import com.qding.park.manager.pojo.TbCar;
import com.qding.park.manager.pojo.example.TbCarExample;

/**
 * @ClassName TbCarMapper
 * @Description TODO(车辆数据层接口)
 * @author Administrator
 * @Date 2016年8月25日 上午10:19:14
 * @version 1.0.0
 */
public interface TbCarStatisMapper {

	/**
	 * @Description (查询车辆列表)
	 * @param bjUserId
	 *            北京用户id
	 * @param phone
	 *            手机号
	 * @return
	 */
	List<TbCar> queryMyCarsByBjcodePhone(@Param("bjUserId") String bjUserId, @Param("phone") long phone);
	
	
	List<TbCar>  queryByParkId(@Param("parkId")int parkId);
	
	/**
	 * @param expireDate
	 * @return
	 */
	List<TbCar> queryExpireCar(@Param("expireDate") Date expireDate);
	
	
	List<TbCar> queryExpireNotice(@Param("expireDate") Date expireDate);
	
	
	/**
	 * @param userId  用户id
	 * @param cars 车辆列表
	 * @return
	 * 车辆列表绑定的其它用户
	 */
	List<Integer> getOtherUser(@Param("userId")int userId,@Param("cars")List<TbCar> cars);
	
	
	/**
	 * @param userId 用户id
	 * @return
	 * 查询用户名下所有的车辆
	 */
	List<TbCar> queryMyCars(@Param("userId")int userId);

	/**
	 * @Description (根据北京用户id查询用户名下所有车辆)
	 * @param bjUserId
	 * @return
	 */
	List<TbCar> queryMyCarsByBjcode(@Param("bjUserId") String bjUserId);
	
	/**
	  * mycars_wx(微信用户名下车牌列表)
	  * TODO(这里描述这个方法适用条件 – 可选)
	  * TODO(这里描述这个方法的执行流程 – 可选)
	  * TODO(这里描述这个方法的使用方法 – 可选)
	  * TODO(这里描述这个方法的注意事项 – 可选)
	  *
	  * @Title: mycars_wx
	  * @Description: TODO
	  * @param @param phone 手机号
	  * @param @return    设定文件
	  * @return List<TbCar>    返回类型
	  * @throws
	  */
	List<TbCar> mycars_wx(@Param("bjcode") String phone);
	
	
	/**
	 * @param parkId  车场编号
	 * @param carNum  车牌
	 * @return
	 */
	List<TbCar> queryCarByParkIdCarNum(@Param("parkId")int parkId,@Param("carNum")String carNum);
	
	/**
	 * @param parkId 车场id
	 * @param carNum 车牌
	 * @param monthlyEndTime 新的到期时间
	 * @return
	 */
	int parkMonthlyFeeReport(@Param("parkId")int parkId,@Param("carNum")String carNum,@Param("expireDate") Date monthlyEndTime);
	
	/**
	  * queryCar_wx(查询微信用户登记的车辆)
	  * TODO(这里描述这个方法适用条件 – 可选)
	  * TODO(这里描述这个方法的执行流程 – 可选)
	  * TODO(这里描述这个方法的使用方法 – 可选)
	  * TODO(这里描述这个方法的注意事项 – 可选)
	  *
	  * @Title: queryCar_wx
	  * @Description: TODO
	  * @param @param phone
	  * @param @param userId
	  * @param @param carNum
	  * @param @return    设定文件
	  * @return TbCar    返回类型
	  * @throws
	  */
	TbCar queryCar_wx(@Param("phone")long phone,@Param("userId")String userId,@Param("carNum")String carNum);
	
	/**
	  * queryByBjuserCarnum(根据北京用户id 车牌   查询车辆详情)
	  * TODO(这里描述这个方法适用条件 – 可选)
	  * TODO(这里描述这个方法的执行流程 – 可选)
	  * TODO(这里描述这个方法的使用方法 – 可选)
	  * TODO(这里描述这个方法的注意事项 – 可选)
	  *
	  * @Title: queryByBjuserCarnum
	  * @Description: TODO
	  * @param @param bjUserId
	  * @param @param carNum
	  * @param @return    设定文件
	  * @return List<TbCar>    返回类型
	  * @throws
	  */
	
	
	List<TbCar>  queryByBjuserCarnum(@Param("bjUserId") String bjUserId,@Param("carNum")String carNum);

	/**
	 * @Description (根据车牌查询车辆信息列表)
	 * @param carNum
	 * @return
	 */
	List<TbCar> queryCarOfParkByCarNum(@Param("carNum") String carNum);
	
	/**
	  * insetNoExists(不存在则插入)
	  * TODO(这里描述这个方法适用条件 – 可选)
	  * TODO(这里描述这个方法的执行流程 – 可选)
	  * TODO(这里描述这个方法的使用方法 – 可选)
	  * TODO(这里描述这个方法的注意事项 – 可选)
	  *
	  * @Title: insetNoExists
	  * @Description: TODO
	  * @param @param car
	  * @param @return    设定文件
	  * @return int    返回类型
	  * @throws
	  */
	
	
	int insetNoExists(TbCar car);
	
	int updateExists(TbCar car);
	
	/**
	  * delete_wx(删除微信用户名下车辆)
	  * TODO(这里描述这个方法适用条件 – 可选)
	  * TODO(这里描述这个方法的执行流程 – 可选)
	  * TODO(这里描述这个方法的使用方法 – 可选)
	  * TODO(这里描述这个方法的注意事项 – 可选)
	  *
	  * @Title: delete_wx
	  * @Description: TODO
	  * @param @param car
	  * @param @return    设定文件
	  * @return int    返回类型
	  * @throws
	  */
	int delete_wx(TbCar car);
	
//	List<TbCar> listByParkid(@Param("parkId") int parkId);
	
	
	/**
	  * queryCarOfParkByParkIdUserId(根据车场id,用户id 查询车辆列表)
	  * TODO(这里描述这个方法适用条件 – 可选)
	  * TODO(这里描述这个方法的执行流程 – 可选)
	  * TODO(这里描述这个方法的使用方法 – 可选)
	  * TODO(这里描述这个方法的注意事项 – 可选)
	  *
	  * @Title: queryCarOfParkByParkIdUserId
	  * @Description: TODO
	  * @param @param parkId
	  * @param @param userId
	  * @param @return    设定文件
	  * @return List<TbCar>    返回类型
	  * @throws
	  */
	List<TbCar> queryCarOfParkByParkIdUserId(@Param("parkId")int parkId,@Param("userId")int userId);

	/**
	 * @Description (根据车场，用户，车牌 查询车信息)
	 * @param parkId
	 * @param userId
	 * @param carNum
	 * @return
	 */
	TbCar queryCarOfParkByParkIdUserIdCarNum(@Param("parkId") int parkId, @Param("userId") int userId,
			@Param("carNum") String carNum);


	/**
	 * @Description (更新到期时间)
	 * @param parkId
	 * @param userId
	 * @param carNum
	 * @param expireDate
	 * @return
	 */
	int updateExpireDate(@Param("parkId")int parkId,@Param("userId")int userId,@Param("carNum")String carNum,@Param("expireDate") Date expireDate);
	
	
	/**
	  * listByParkid(查询车场的所有列表)
	  * TODO(这里描述这个方法适用条件 – 可选)
	  * TODO(这里描述这个方法的执行流程 – 可选)
	  * TODO(这里描述这个方法的使用方法 – 可选)
	  * TODO(这里描述这个方法的注意事项 – 可选)
	  *
	  * @Title: listByParkid
	  * @Description: TODO
	  * @param @param parkid
	  * @param @return    设定文件
	  * @return List<TbCarlock>    返回类型
	  * @throws
	  */
	
	
	List<TbCar> listByParkid(@Param("parkId")int parkid);
	
	
	/**
	  * listByExample(统计查询车辆信息)
	  * TODO(这里描述这个方法适用条件 – 可选)
	  * TODO(这里描述这个方法的执行流程 – 可选)
	  * TODO(这里描述这个方法的使用方法 – 可选)
	  * TODO(这里描述这个方法的注意事项 – 可选)
	  *
	  * @Title: listByExample
	  * @Description: TODO
	  * @param @param example
	  * @param @return    设定文件
	  * @return List<TbCar>    返回类型
	  * @throws
	  */
	
	
	List<TbCar> listByExample(TbCarExample  example);
	
	/**
	  * batchUpdate( 批量更新)
	  * TODO(这里描述这个方法适用条件 – 可选)
	  * TODO(这里描述这个方法的执行流程 – 可选)
	  * TODO(这里描述这个方法的使用方法 – 可选)
	  * TODO(这里描述这个方法的注意事项 – 可选)
	  *
	  * @Title: batchUpdate
	  * @Description: TODO
	  * @param @param updates
	  * @param @return    设定文件
	  * @return int    返回类型
	  * @throws
	  */
	
	
	int batchUpdate(List<TbCar> updates);
	
	/**
	  * batchInsert(批量插入)
	  * TODO(这里描述这个方法适用条件 – 可选)
	  * TODO(这里描述这个方法的执行流程 – 可选)
	  * TODO(这里描述这个方法的使用方法 – 可选)
	  * TODO(这里描述这个方法的注意事项 – 可选)
	  *
	  * @Title: batchInsert
	  * @Description: TODO
	  * @param @param inserts
	  * @param @return    设定文件
	  * @return int    返回类型
	  * @throws
	  */
	
	
	int batchInsert(@Param("list") List<TbCar> inserts);
	
	
	int getNextValue();

}
